package cn.genmer.test.security.utils;

import java.util.List;
import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.io.ZipInputStream;
import net.lingala.zip4j.model.FileHeader;

public class ZIP4JUtils {
	/**
	 * @param file
	 * @throws Exception
	 */
	public static void readZipFileMD5ByZip4J(String file) throws Exception {
		file.replaceAll("\\\\", "/");
		ZipFile zFile = new ZipFile(file);
		// 此处最好立即设置字符集
		zFile.setFileNameCharset("GBK");
		if (!zFile.isValidZipFile()) {
			return ;
		}
		
		// 获取ZIP中所有文件的FileHeader，以便后面对zip中文件进行遍历
		List<FileHeader> list = zFile.getFileHeaders();
		// 此时list的size包括：文件夹、子文件夹、文件的个数
		System.out.println(list.size());
		// 遍历其中的文件
		for (FileHeader fileHeader : list) {
			String fileName = fileHeader.getFileName();
			// fileName会将目录单独读出来，而且带有路径分割符
			if (fileName.endsWith("/") || fileName.endsWith("\\\\") || fileName.endsWith("\\")) {
				System.out.println(fileName + " 这是一个文件夹。");
				continue;
			}else {
				ZipInputStream inputStream = zFile.getInputStream(fileHeader);
//				String Md5String = BigFileMD5.getStreamMD5(inputStream);
//				System.out.println(fileName + " 这是一个文件，该文件的MD5值：" + Md5String);
			}
		}
    }
}
